package com.google.ant.extensions.utils;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.xml.namespace.NamespaceContext;
import org.w3c.dom.Node;

public  final class MapNamespaceContext implements NamespaceContext {
    private Map<String, String> namespaces = new HashMap<String, String>();
    private Node targetNode;

    public MapNamespaceContext() {
        super();
    }

    public MapNamespaceContext(final Map<String, String> ns) {
        this();
        this.namespaces = ns;
    }

    public MapNamespaceContext(final Node node) {
        this();
        this.targetNode = node;
    }

    public void setTargetNode(final Node node) {
        this.targetNode = node;
    }

    public void addNamespace(final String prefix, final String namespaceURI) {
        this.namespaces.put(prefix, namespaceURI);
    }

    public void addNamespaces(final Map<String, String> ns) {
        this.namespaces.putAll(ns);
    }

    public String getNamespaceURI(String prefix) {
        if (targetNode != null) {
            String s = targetNode.lookupNamespaceURI(prefix);
            if (prefix != null && s != null) {
                namespaces.put(prefix, s);
            }
        }
        return namespaces.get(prefix);
    }

    public String getPrefix(String namespaceURI) {
        for (Map.Entry<String, String> e : namespaces.entrySet()) {
            if (e.getValue().equals(namespaceURI)) {
                return e.getKey();
            }
        }
        return null;
    }

    public Iterator getPrefixes(String namespaceURI) {
        return null;
    }

    public Map<String, String> getUsedNamespaces() {
        return namespaces;
    }
}
